The use of multithreading is increasingly common in computing systems, especially in server environments. Multithreading allows for multiple tasks to be “active” on a computing platform simultaneously. The tasks can be any type of application, kernel, program, software module, etc., which may execute on a computing system. Multitasking can be truly simultaneous through the use of multiple processors and/or processing cores. Multitasking can result in execution of tasks in an apparently simultaneous manner to a user through the sharing or resource allocation of the computing resources in the computing system. In apparent or pseudo multitasking, the resources of the computing system are shared in a manner that it would generally appear to a user that multiple tasks are being executed simultaneously. The computing system generally switches very quickly (relative to a user's perceptions) between dedicating resources to the various tasks, and so appears to be executing each simultaneously.
Especially in server environments, multiple threads may be started or active. The group of active threads may be referred to as a thread pool. Traditional management of a thread pool has been limited to the static configuration settings in place in a system. That is, a system may be allowed to have a certain number (e.g., up to a configured maximum) of managed threads or threads that are open at a time in the system. The configuration is traditionally based on network configuration settings that have little or nothing to do with the actual hardware on which the threads are to be executed. Additionally, the management of the thread pool is traditionally inefficient due to the inefficient use of resources in a system. The thread management may attempt to allow more active threads than can be supported by the hardware. In a case where multiple systems are sharing the same hardware resources, multiple thread pools having the same settings and the same type management can result in significant inefficiencies. The inefficiencies result in increased delays and decreased network performance.